package com.ryskoo.catering.productmain.service;

import com.ryskoo.catering.productcate.domain.ProductCategoryPO;
import com.ryskoo.catering.productmain.domain.ProductMainPO;
import com.ryskoo.framework.core.bean.QueryMessageDTO;
import com.ryskoo.framework.core.service.IBasicService;

import java.util.List;

public interface IProductMainService extends IBasicService<ProductMainPO> {
    /**
     * 菜品批量/单个上架
     * @param idList
     */
    void onShelves(List<String> idList);

    /**
     * 菜品批量/单个下架
     * @param idList
     */
    void offShelves(List<String> idList);

    /**
     * 菜品批量/单个售罄
     * @param idList
     */
    void sellOut(List<String> idList);

    /**
     * 菜品批量/单个补货
     * @param idList
     */
    void supply(List<String> idList);

    /**
     * 根据分类uuid查询商品uuid集合
     * @param categoryUuid
     * @return
     */
    List<String> getUuidsByCategoryId(String categoryUuid);

    /**
     * 跳转到编辑页面时，组装商品编辑页面的数据
     * @param uuid
     * @return
     */
    ProductMainPO toEdit(String uuid);

    List<ProductMainPO> getProductInfoList(QueryMessageDTO qm);

    List<ProductMainPO> getProductInfoFromES(QueryMessageDTO qm);

    int getCountFromES(QueryMessageDTO qm);

    /**
     * 保存商品信息
     * @param productMainPO
     */
    void saveProduct(ProductMainPO productMainPO);

    /**
     * 更新商品信息
     * @param productMainPO
     */
    void updateProduct(ProductMainPO productMainPO);

    /**
     * 删除多商品
     * @param idList
     */
    void deleteProducts(List<String> idList);

    /**
     * 同步商品信息到ES
     *
     * @param qm
     */
    void syncProductToES(QueryMessageDTO qm);

    /**
     * 从ES删除商品信息
     *
     * @param idList
     */
    void deleteProductFromES(List<String> idList);

    void syncToElastic(List<ProductMainPO> list);

    /**
     * 获取某商户下的所有分类及商品
     * @param vendorUuid
     * @return
     */
    List<ProductCategoryPO> getAllProductsByVendorUuid(String vendorUuid);
    
    /**
     * 供前台首页使用，查询招牌和优惠标签的商品，以及商户所有商品
     * @param vendorUuid
     * @param showSign
     * @param showPromotion
     * @return
     */
    List<ProductCategoryPO> getAllProducts(String vendorUuid, Boolean showSign, Boolean showPromotion);
}
